#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
//#include <thread>



#define CLEAR() printf("\033[2J") // 清除屏幕      
#define MOVEUP(x) printf("\033[%dA", (x))  // 上移光标   
#define MOVEDOWN(x) printf("\033[%dB", (x))  // 下移光标    
#define MOVELEFT(y) printf("\033[%dD", (y))  // 左移光标    
#define MOVERIGHT(y) printf("\033[%dC",(y))  // 右移光标  
#define MOVETO(x,y) printf("\033[%d;%dH", (x), (y))  // 定位光标 
#define RESET_CURSOR() printf("\033[H")  // 光标复位  
#define HIDE_CURSOR() printf("\033[?25l") // 隐藏光标 
#define SHOW_CURSOR() printf("\033[?25h")  // 显示光标  
#define HIGHT_LIGHT() printf("\033[7m")  //反显  
#define UN_HIGHT_LIGHT() printf("\033[27m") 
#define random(x) (rand()%x)

using namespace std;

class Spirit{
	
public:
	Spirit()
	{
	
		quei=new int[m*n];
		quej=new int[m*n];
		prep=new int[m*n];
		head=0;
		rear=1;
		length=1;
		num=0;
		quei[head]=1;
		quej[head]=1;
		prep[head]=-1;
		de=new int[50];
		
	}
	
	void new_space(int m1, int n1);//分配空间
	
	void delete_space(int m1);//释放空间
	
	void Maze_Runner();//移动精灵
	
	void Building_labyrinth();//创建迷宫

private:
	int **p,**p1;//定义一个二维的int数组
	int *de;
	int m,n;
	int num;
	int *quei;//储存行坐标队列
	int *quej;//储存列坐标队列
	int *prep;//储存之前一步在队列中的位置
	int head,rear,length;//队列头，队列尾，队列长度
	int pos;//当前节点在队列中的位置
	int ci,cj,ni,nj;//当前节点坐标 新节点坐标
	int dir;//移动方向
};


	 /* 分配空间*/
void Spirit::new_space(int m1, int n1)
{
	m=m1;
	n=n1;
	//
	//创建行指针
	p=new int*[m+2];
	p1=new int*[m+2];
	//为每一行分配空间
	for(int i=0;i<=m+1;i++)
	{
	p[i] = new int [n+2];
	p1[i] = new int [n+2];
	}
}
/*释放空间*/
void Spirit::delete_space(int m1)
{
	m=m1;
	
	for(int i=0;i<=m+1;i++){
		
		delete[] p[i];
		delete[] p1[i];
	}
		delete[] p;
		delete[] p1;

}

/*创建迷宫*/
void Spirit::Building_labyrinth()
{
	srand((int)time(0));
	for(int i=0;i<=m+1;i++)
	{
		for(int j=0;j<=n+1;j++)
		{
			if(i==0|j==0|i==m+1|j==n+1)
			{
				p[i][j]=1;
				p1[i][j]=1;
			}
			else
			{
				int x=random(50);
				if(x<=3)
				{
					p[i][j]=1;
					p1[i][j]=1;
				}
				else
				{
					p[i][j]=0;
					p1[i][j]=0;
				}	
			}
					if(p[i][j]==0)
						cout<<" ";
					else
						cout<<"#";
		}			
				cout<<endl;
	}
} 


/*移动精灵*/
void Spirit::Maze_Runner() 
{
	
	int move[8][2] = {0,1,1,0,0,-1,-1,0,-1,-1,-1,1,1,-1,1,1} ;
	if(p[1][1]==1)//第一点为1无法通过
		length=0;
	else
		p[1][1]=1;
	for(int i=0;i<=m;i--)
	{
		for(int j=0;j<=n;j--)
		{
			
			
		}
	}
	delete []quei;
	delete []quej;
	delete []prep;
}

int main()
{
	//定义一个精灵对象
	Spirit Smurfs;
	int m1,n1;
	cout<<"请输入迷宫规格：";
	cin>>m1>>n1;
	
	Smurfs.new_space(m1,n1);
	
	Smurfs.Building_labyrinth();
	
	Smurfs.Maze_Runner(); 

	Smurfs.delete_space(m1);
	
	return 0;
}